#ifndef COMMON_H
#define COMMON_H

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include "MQTTClient.h"
//共享内存中设备数据结构
typedef struct 
{
    /* data */
    int dev_id; //设备id
    double tem; //温度
    double hum; //湿度
    //int status;  //状态
    //long long timestamp; //时间戳
}devdata;

//  QT→MQTT的指令结构体（供单片机解析）
typedef struct {
    char cmd[32];       // 指令类型
    float value;        // 指令参数
} QtCmd;

//消息队列节点（存储JSON数据）
typedef struct MsgNode {  // 标签 MsgNode
    char *json_buf;
    struct MsgNode* next;  // 明确引用自身标签
} MsgNode;

//线程消息队列（用于线程间通信）
typedef struct MsgQueue
{
    /* data */
    MsgNode* head;
    MsgNode* tail;
    pthread_mutex_t mutex;  //互斥锁
    pthread_cond_t cond; //通知用户的条件变量
    int running;  //队列运行标记（控制线程退出）
}MsgQueue;

//消息队列操作函数
void msg_queue_init(MsgQueue* queue); //初始化消息队列
void msg_queue_send(MsgQueue* queue,const char* json_buf);   //向队列推送数据
char* msg_queue_read(MsgQueue* queue);   //向队列读取数据
void msg_queue_destory(MsgQueue* queue); //销毁消息队列

//线程函数
void * read_shm_thread(void* arg);  //读共享内存+序列化线程
void* mqtt_publish_thread(void* arg); //MQTT发布线程
int mqtt_msg_thread(void *context, char *topic, int topic_len, MQTTClient_message *msg);//MQTT订阅线程
void* queue_thread(void* arg);//消息队列线程

#endif
